package package01.handler;

import com.iweb.lesson07.dao.ChatDao;
import com.iweb.lesson07.dao.ChatDaoImp;
import com.iweb.lesson07.pojo.Chat;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @Description 1. 接收socket流，通过对象流将字节流反序列化为对象
 * 2. 实例化ChatDao，将chat对象保存至数据库。
 * @Return
 * @Author zzj
 * @Date 2020/7/21 18:40
 **/
public class ServerHandler implements Runnable {

    private Socket socket;

    public ServerHandler(Socket socket) {
        this.socket = socket;
    }

    /**
    * @Description
    * socket流反序列化，还原成chat对象，再讲chat对象save到数据库
    * @Return void
    * @Author zzj
    * @Date 2020/7/21 19:23
    **/
    @Override
    public void run() {

        try {
            // 读取数据（将客户端传来的socket转化为流）
            InputStream in = socket.getInputStream();
            // TO DO写入数据库
            // 接收客户端发送的对象
            // 新建一个对象输入流，将流作为参数传入
            ObjectInputStream oi = new ObjectInputStream(in);
            // 反序列化，将字节再次转化为对象，得到chat对象
            Chat chat = (Chat) oi.readObject();

            /*保存数据库开始*/
            // 实例化ChatDao接口
            ChatDao chatDao = new ChatDaoImp();
            // 将chat对象用save保存到数据库
            chatDao.save(chat);
            /*保存数据库结束*/

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭socket
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
